
#include <limits.h>

int tadd_ok(int x, int y) {
    int sum = x + y;
    // 检查是否发生了溢出
    return ((x > 0 && y > 0 && sum < 0) || (x < 0 && y < 0 && sum > 0)) ? 0 : 1;
}

int tsub_ok(int x, int y) {
    // 1. 如果 y 是 最小负数 的话，是不会发生溢出的，会计算的特别正确，但是如果交给 tadd_ok 函数的话就会发生溢出
    if (y == INT_MIN) {
        if (x < 0) {
            return 1;
        } else {
            return 0; // 添加对 x >= 0 的处理
        }
    }
    // 2. 如果 y 不是 TMin 的话，直接调用 tadd_ok 函数判断是否会发生溢出
    return tadd_ok(x, -y);
}

// 测试函数
#include <stdio.h>
int main() {
    int x = INT_MIN; // 最小的有符号整数
    int y = -1; // 减1
    if (tsub_ok(x, y)) {
        printf("No overflow\n");
    } else {
        printf("Overflow\n");
    }
    return 0;
}

// Usage: gcc -o tsub_ok.out 2.32-tsub_ok.c
// Output: No overflow